#include <header.h>

/**
 * 信号递送过程中，产生了另一个同类信号会怎么样？
 * 产生了另两个、三个、多个同类信号会怎么样？
 * 写代码验证一下你的想法。说明mask和pending如何变化。
*/

void print_set(sigset_t *set){
    int i;
    for (i = 1; i<32; i++) {
        if (sigismember(set, i))
            putchar('1');
        else
            putchar('0');
    }
    printf("\n");
}

void handler(int num){
	printf("i am handler\n");

    sleep(5);

    // 判断未决信号集peding
    sigset_t pre_set;
    int ret = sigpending(&pre_set);
    ERROR_CHECK(ret, -1, "sigpending\n");
    print_set(&pre_set);

    // 判断阻塞信号集mask
    // 在handler执行过程中会屏蔽2号信号
    sigset_t set,old;
    sigemptyset(&set);
    sigemptyset(&old);
    sigprocmask(SIG_BLOCK, &set, &old);
    print_set(&old);

}


int main(int argc, char *argv[]){

    signal(SIGINT, handler);
	while(1);

	return 0;
}